/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package service;

import controladores.ActividadJpaController;
import controladores.ControladorGenerico;
import controladores.ControladorTransaccional;
import controladores.SesionJpaController;
import entidades.Actividad;
import entidades.Participacion;
import entidades.miembros.Miembro;
import java.util.List;
import javax.persistence.RollbackException;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.HeaderParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;

/**
 *
 * @author fcarou
 */
@Path ("actividades")
public class RestActividades
{
    @GET
    @Path ("todas")
    @Produces (MediaType.APPLICATION_JSON)
    public List<Actividad> getActividades (@HeaderParam ("codigo") String codigo)
    {
        if (!new SesionJpaController().checkCodigoSesion(codigo))
            return null;
        
        return new ControladorGenerico().buscarTodos(Actividad.class);
    }
    
    @GET
    @Path ("porNombre")
    @Produces (MediaType.APPLICATION_JSON)
    public List<Actividad> getActividadesNombre (@HeaderParam ("codigo") String codigo, @QueryParam ("nombre") String nombre)
    {
        if (!new SesionJpaController().checkCodigoSesion(codigo))
            return null;
        
        return new ActividadJpaController().buscarPorNombre(nombre);
    }
    
    @POST
    @Path ("create")
    @Consumes (MediaType.APPLICATION_JSON)
    public boolean create (Actividad actividad, @HeaderParam ("codigo") String codigo)
    {
        if (!new SesionJpaController().checkCodigoSesion(codigo))
            return false;
        
        return new ActividadJpaController().create(actividad);
    }
    
    @POST
    @Path ("edit")
    @Consumes (MediaType.APPLICATION_JSON)
    public boolean edit (Actividad actividad, @HeaderParam ("codigo") String codigo)
    {
        if (!new SesionJpaController().checkCodigoSesion(codigo))
            return false;
        
        return new ActividadJpaController().edit(actividad);
    }
    
    @GET
    @Path ("anotar")
    public boolean anotar (@QueryParam ("idActividad") long idActividad, @QueryParam ("idMiembro") long idMiembro, @HeaderParam ("codigo") String codigo)
    {
        if (!new SesionJpaController().checkCodigoSesion(codigo))
            return false;
        
        ControladorGenerico con = new ControladorGenerico();
        Actividad actividad = (Actividad) con.buscarPorID(Actividad.class, idActividad);
        Miembro miembro = (Miembro) con.buscarPorID(Miembro.class, idMiembro);
        
        if (actividad == null || miembro == null)
            return false;
        
        ControladorTransaccional conTransaccional = new ControladorTransaccional();
        conTransaccional.begin();
        
        Participacion participacion = new Participacion(actividad, miembro);
        conTransaccional.create(participacion);
        actividad.getParticipaciones().add(participacion);
        conTransaccional.edit(actividad);
        
        try
        {
            conTransaccional.commit();
            return true;
        }
        catch (RollbackException ex)
        {
            return false;
        }
    }
    
    @GET
    @Path ("abonarCuota")
    public boolean abonarCuota (@QueryParam ("idActividad") long idActividad, @QueryParam ("idMiembro") long idMiembro, @HeaderParam ("codigo") String codigo)
    {
        if (!new SesionJpaController().checkCodigoSesion(codigo))
            return false;
        
        ControladorGenerico con = new ControladorGenerico();
        
        //Miembro miembro = con.buscarPorID(Miembro.class, idMiembro);
        
        return true;
    }
}
